iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
自我挑戰組

2D像素遊戲設計經驗分享系列 第 23

2D像素遊戲開發經驗分享 - Unity 橫向遊戲的基本移動編寫(3)

  • 分享至 

  • xImage
  •  

承上一篇內容,我們己經成功利用 Rigidbody 的功能去設計一個角色左右移動的腳本。這次我們將修正一些有可能出現的小問題。

首先,現在的移動程式碼使玩家減速率較為低,這時我們可以同樣利用 Dawnosaur 提供的設計去製作一個阻力系統。先建立一個全域變數:

    [SerializeField] private float frictionAmount = 1f;

然後在 FixedUpdate() 的 AddForce() 後方建立以下程式碼:

        // 如果玩家沒有輸入移動時,觸發阻力系統
        if(Mathf.Abs(inputDirection) < 0.01f)
        {
            // 避免阻力過大,如果阻力大於速度時,設定阻力為與玩家同等的速度
            float applyAmount = Mathf.Min(Mathf.Abs(rb.velocity.x), Mathf.Abs(frictionAmount));

            // 把阻力根據玩家當前移動方向去決定阻力要施加的方向
            applyAmount = applyAmount * Mathf.Sign(rb.velocity.x) * -1;

            rb.AddForce(applyAmount * Vector2.right, ForceMode2D.Impulse);
        }

再來,玩家有可能在平地移動時突然被卡住,這可能和場景以及角色的碰撞箱設定有關。場景方面,Tilemap Collider 較容易出現問題,如果沒有斜坡,玩家可以考慮使用多個 Box Collider 進行組合。
https://ithelp.ithome.com.tw/upload/images/20231008/201631465yTr3W9OXX.png

如果是有斜坡,可以考慮使用多邊形碰撞器 Polygon Collider。
https://ithelp.ithome.com.tw/upload/images/20231008/20163146wf3cksVgph.png
https://ithelp.ithome.com.tw/upload/images/20231008/201631469sKBxGVIsR.png

另外,玩家角色有可能會卡在一些掉下去的角落位置。https://ithelp.ithome.com.tw/upload/images/20231009/201631467QDDJn9Cc3.png

可以考慮為角色在腳下位置改用圓形碰撞器,或者整個角色改用膠囊碰撞器。
https://ithelp.ithome.com.tw/upload/images/20231009/20163146S4XAeyyamw.png


上一篇
2D像素遊戲開發經驗分享 - Unity 橫向遊戲的基本移動編寫(2)
下一篇
2D像素遊戲開發經驗分享 - Unity 橫向遊戲的基本移動編寫(4)
系列文
2D像素遊戲設計經驗分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言